#ifndef UTILS_LIB_H
#define UTILS_LIB_H

#include <string>
#include <vector>

// 动态库导出宏
#ifdef UTILS_SHARED_LIB
    #ifdef _WIN32
        #define UTILS_API __declspec(dllexport)
    #else
        #define UTILS_API __attribute__((visibility("default")))
    #endif
#else
    #define UTILS_API
#endif

namespace Utils {

// 字符串工具类
class UTILS_API StringUtils {
public:
    static std::string trim(const std::string& str);
    static std::string toUpper(const std::string& str);
    static std::string toLower(const std::string& str);
    static std::vector<std::string> split(const std::string& str, char delimiter);
    static std::string join(const std::vector<std::string>& strings, const std::string& delimiter);
    static bool startsWith(const std::string& str, const std::string& prefix);
    static bool endsWith(const std::string& str, const std::string& suffix);
};

// 文件工具类
class UTILS_API FileUtils {
public:
    static bool fileExists(const std::string& path);
    static bool directoryExists(const std::string& path);
    static std::string readFile(const std::string& path);
    static bool writeFile(const std::string& path, const std::string& content);
    static std::vector<std::string> listFiles(const std::string& directory);
    static std::string getFileExtension(const std::string& path);
    static std::string getFileName(const std::string& path);
};

// 时间工具类
class UTILS_API TimeUtils {
public:
    static std::string getCurrentTime();
    static std::string formatTime(const std::string& format);
    static long long getCurrentTimestamp();
    static std::string timestampToString(long long timestamp);
};

} // namespace Utils

#endif // UTILS_LIB_H